home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src_win / WinHTTrack / WinHTTrack.cpp < prev    next >
C/C++ Source or Header  |  2005-02-16  |  22KB  |  874 lines

  1. // WinHTTrack.cpp : Defines the class behaviors for the application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "WinHTTrack.h"
  6.  
  7. #include "Shell.h"
  8. #include "winsock.h"
  9.  
  10. #include "wid1.h"
  11. #include "maintab.h"
  12.  
  13. #include "MainFrm.h"
  14. #include "splitter.h"
  15. #include "about.h"
  16.  
  17. #include "WinHTTrackDoc.h"
  18. #include "WinHTTrackView.h"
  19.  
  20. #include "inprogress.h"
  21.  
  22. /* HTS - HTTRACK */
  23. extern "C" {
  24.   #include "HTTrackInterface.h"
  25.   #include "htsbase.h"
  26.   #include "htsglobal.h"
  27.   #include "htsthread.h"
  28. };
  29.  
  30. #ifdef _DEBUG
  31. #define new DEBUG_NEW
  32. #undef THIS_FILE
  33. static char THIS_FILE[] = __FILE__;
  34. #endif
  35.  
  36. //
  37. #include "DialogContainer.h"
  38. #include "InfoUrl.h"
  39.  
  40. // PAS de domodal a l'exterieur!!!!!
  41. #include "wizard.h"
  42. #include "wizard2.h"
  43. #include "WizLinks.h"
  44. extern char WIZ_question[1000];
  45. extern char WIZ_reponse[1000];
  46.  
  47.  
  48. extern Wid1* dialog1;
  49. extern CMainTab* maintab;
  50. extern Cinprogress* inprogress;
  51. extern CShellApp* CShellApp_app;
  52. extern int termine;
  53. extern int termine_requested;
  54. extern int soft_term_requested;
  55. extern int shell_terminated;
  56. extern CInfoUrl* _Cinprogress_inst;
  57. extern int LibRasUse;
  58.  
  59. /*extern "C" {
  60.   char* hts_rootdir(char* file);
  61. };*/
  62.  
  63.  
  64. // rmdir
  65. #include <direct.h>
  66.  
  67. // linput
  68. /*extern "C" {
  69.   void linput(FILE* fp,char* s,int max);
  70.   void linput_trim(FILE* fp,char* s,int max);
  71.   void linput_cpp(FILE* fp,char* s,int max);
  72. };*/
  73.  
  74. /* WinHTTrack refresh Mutex */
  75. HANDLE WhttMutex;
  76.  
  77. /* Location */
  78. char* WhttLocation="";
  79.  
  80.  
  81. // HTTrack main vars
  82. HWND App_Main_HWND;
  83. CSplitterFrame* this_CSplitterFrame=NULL;
  84. HICON httrack_icon;
  85. // Helper
  86. LaunchHelp* HtsHelper=NULL;
  87.  
  88. // dirtreeview
  89. #include "DirTreeView.h"
  90. extern CDirTreeView* this_DirTreeView;
  91.  
  92. // New Project
  93. #include "NewProj.h"
  94. extern CNewProj* dialog0;
  95.  
  96.  
  97. // InfoEnd
  98. #include "infoend.h"
  99. extern Cinfoend* this_Cinfoend;
  100.  
  101. // Pointeur sur nous
  102. CWinHTTrackApp* this_app=NULL;
  103.  
  104. // fexist
  105. extern "C" int fexist(char*);
  106.  
  107. /////////////////////////////////////////////////////////////////////////////
  108. // CWinHTTrackApp
  109.  
  110. BEGIN_MESSAGE_MAP(CWinHTTrackApp, CWinApp)
  111.     //{{AFX_MSG_MAP(CWinHTTrackApp)
  112.     ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  113.     ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  114.     ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  115.     ON_COMMAND(ID_FILE_MRU_FILE1, OnFileMruFile1)
  116.     //}}AFX_MSG_MAP
  117.   ON_COMMAND(wm_ViewRestart,OnViewRestart)
  118.   ON_COMMAND(wm_WizRequest1,OnWizRequest1)
  119.   ON_COMMAND(wm_WizRequest2,OnWizRequest2)
  120.   ON_COMMAND(wm_WizRequest3,OnWizRequest3)
  121.     // Standard file based document commands
  122.     //ON_COMMAND(ID_FILE_WIZARD, OnWizard)
  123.     ON_COMMAND(ID_FILE_NEW, OnFileNew)
  124.     ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  125.     ON_COMMAND(ID_FILE_DELETE_PROJ, OnFileDelete)
  126.     ON_COMMAND(ID_FILE_BROWSE_SIT, OnBrowseWebsites)
  127.   ON_COMMAND(IDC_langprefs,Onipabout)
  128.   ON_COMMAND(ID_ABOUT,Onipabout)
  129.   ON_COMMAND(ID_UPDATE,OnUpdate)
  130.     ON_COMMAND(ID_HELP_FINDER,OnHelpInfo2)
  131.     ON_COMMAND(ID_HELP,OnHelpInfo2)
  132.     //ON_COMMAND(ID_CONTEXT_HELP,OnContextHelp)
  133.     ON_COMMAND(ID_DEFAULT_HELP,OnHelpInfo2)
  134.   // Forward to inprogress
  135.   ON_BN_CLICKED(ID_LOAD_OPTIONS,FwOnLoadprofile)
  136.   ON_BN_CLICKED(ID_FILE_SAVE_OPTIONS_AS,FwOnSaveprofile)
  137.     ON_BN_CLICKED(ID_LoadDefaultOptions, FwOnLoaddefault)
  138.     ON_BN_CLICKED(ID_SaveDefaultOptions, FwOnSavedefault)
  139.     ON_BN_CLICKED(ID_ClearDefaultOptions,FwOnResetdefault)
  140.   //
  141.   ON_BN_CLICKED(ID_WINDOW_HIDE,FwOnhide)
  142.   //
  143.     ON_BN_CLICKED(ID_OPTIONS_MODIFY,FwOnModifyOpt)
  144.     ON_BN_CLICKED(ID_FILE_PAUSE,FwOnPause)
  145.     ON_BN_CLICKED(ID_LOG_VIEWLOG,FwOniplogLog)
  146.     ON_BN_CLICKED(ID_LOG_VIEWERRORLOG,FwOniplogErr)
  147.     ON_BN_CLICKED(ID_LOG_VIEWTRANSFERS,FwOnViewTransfers)
  148. END_MESSAGE_MAP()
  149.  
  150. /////////////////////////////////////////////////////////////////////////////
  151. // CWinHTTrackApp construction
  152.  
  153. CWinHTTrackApp::CWinHTTrackApp()
  154. {
  155.   // HTTrack inits
  156.   CreateMutex(NULL, FALSE, "WinHTTrack_RUN");
  157.   HtsHelper = new LaunchHelp();
  158. }
  159.  
  160. CWinHTTrackApp::~CWinHTTrackApp()
  161. {
  162.   DeleteTabs();
  163.   delete HtsHelper;
  164.   HtsHelper=NULL;
  165. }
  166.  
  167. /////////////////////////////////////////////////////////////////////////////
  168. // The one and only CWinHTTrackApp object
  169.  
  170. CWinHTTrackApp theApp;
  171.  
  172. /////////////////////////////////////////////////////////////////////////////
  173. // CWinHTTrackApp initialization
  174.  
  175. void InitCBErrMsg(char* msg, char* file, int line) {
  176.   CString st;
  177.   st.Format("A fatal error has occured\r\n%s"
  178.     "\r\nin file '%s', line %d\r\n"
  179.     "Please report the problem at http://forum.httrack.com\r\n"
  180.     "using the CRASH.TXT file generated in the WinHTTrack directory\r\n"
  181.     "Thank you!", msg, file, line);
  182.   AfxMessageBox(st, MB_OK|MB_APPLMODAL|MB_SYSTEMMODAL|MB_ICONSTOP);
  183. }
  184. void InitCBErr() {
  185.   htsCallbackErr = InitCBErrMsg;
  186. }
  187.  
  188. int Eval_Exception( void );
  189.  
  190. int Eval_Exception ( int n_except )
  191. {
  192.     AfxMessageBox("error");
  193.  
  194.     return 0;
  195. }
  196.  
  197. /*extern "C" {
  198.   int hts_init(void);
  199.   void hts_uninit(void);
  200. }*/
  201.  
  202. #include "mmsystem.h"
  203.  
  204. BOOL CWinHTTrackApp::InitInstance()
  205. {
  206.   /* No error messageboxes */
  207.   SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX);
  208.  
  209.   /* Inits */
  210.   InitCBErr();
  211.   hts_init();
  212.  
  213.   WhttMutex = CreateMutex(NULL,FALSE,NULL);
  214.  
  215.   // Change the registry key under which our settings are stored.
  216.   // TODO: You should modify this string to be something appropriate
  217.   // such as the name of your company or organization.
  218.   SetRegistryKey("WinHTTrack Website Copier");
  219.   LANG_INIT();    // petite init langue
  220.   
  221.   /* INDISPENSABLE pour le drag&drop! */
  222.   InitCommonControls();
  223.   if (!AfxOleInit())
  224.   {
  225.       AfxMessageBox(LANG(LANG_F1));
  226.       return FALSE;
  227.   }
  228.   AfxEnableControlContainer();
  229.   
  230.   // Pointeur sur CShellApp
  231.   CShellApp_app=&app;
  232.   this_app=this;
  233.   _Cinprogress_inst=NULL;
  234.   LibRasUse=0;
  235.  
  236.     // Standard initialization
  237.     // If you are not using these features and wish to reduce the size
  238.     //  of your final executable, you should remove from the following
  239.     //  the specific initialization routines you do not need.
  240.  
  241.   httrack_icon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  242.  
  243.     LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  244.  
  245.     // Register the application's document templates.  Document templates
  246.     //  serve as the connection between documents, frame windows and views.
  247.  
  248.   // DOC //
  249.     CMultiDocTemplate* pDocTemplate;
  250.     pDocTemplate = new CMultiDocTemplate(
  251.         IDR_MAINFRAME,
  252.         RUNTIME_CLASS(CWinHTTrackDoc),
  253.         RUNTIME_CLASS(CSplitterFrame),       // main SDI frame window
  254.         RUNTIME_CLASS(CView)); 
  255.     AddDocTemplate(pDocTemplate);
  256.  
  257.   /*
  258.     CMDIFrameWnd* pMainFrame = new CMDIFrameWnd;
  259.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  260.         return FALSE;
  261.   */
  262.  
  263.     // create main window
  264.     CMainFrame* pMainFrame = new CMainFrame;
  265.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  266.         return FALSE;
  267.     m_pMainWnd = pMainFrame;
  268.     int nCmdShow = m_nCmdShow;
  269.  
  270.  
  271.   // Also in this example, there is only one menubar shared between
  272.     //  all the views.  The automatic menu enabling support of MFC
  273.     //  will disable the menu items that don't apply based on the
  274.     //  currently active view.  The one MenuBar is used for all
  275.     //  document types, including when there are no open documents.
  276.  
  277.   // enable file manager drag/drop and DDE Execute open
  278.     pMainFrame->DragAcceptFiles();
  279.  
  280.   // Now finally show the main menu
  281.     //pMainFrame->ShowWindow(m_nCmdShow);
  282.     //pMainFrame->UpdateWindow();
  283.     m_pMainWnd = pMainFrame;
  284.  
  285.   // command line arguments are ignored, create a new (empty) document
  286.     //OnFileNew();
  287.   // DOC //
  288.  
  289.   // Parse command line for standard shell commands, DDE, file open
  290.   CCommandLineInfo cmdInfo;
  291.   ParseCommandLine(cmdInfo);
  292.  
  293.   TCHAR ModulePath[MAX_PATH + 1];
  294.   ModulePath[0] = '\0';
  295.   ::GetModuleFileName(NULL, ModulePath, sizeof(ModulePath)/sizeof(TCHAR) - 1);
  296.   hts_rootdir(ModulePath);
  297.  
  298.   // Restore position
  299.     ((CMainFrame*)m_pMainWnd)->InitialShowWindow(nCmdShow);
  300.     pMainFrame->UpdateWindow();
  301.  
  302.     // Dispatch commands specified on the command line
  303.     if (!ProcessShellCommand(cmdInfo))
  304.         return FALSE;
  305.  
  306.   // Init Winsock
  307.   WSockInit();
  308.  
  309.     // The one and only window has been initialized, so show and update it.
  310.     //m_pMainWnd->ShowWindow(SW_SHOW);
  311.     //m_pMainWnd->UpdateWindow();
  312.  
  313.   /*CWinApp* app=AfxGetApp();
  314.   POSITION pos;
  315.   pos=app->GetFirstDocTemplatePosition();
  316.   CDocTemplate* templ = app->GetNextDocTemplate(pos);
  317.   pos=templ->GetFirstDocPosition();
  318.   CDocument* doc  = templ->GetNextDoc(pos);
  319.  
  320.   CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CTest );
  321.   CObject* pObject = pRuntimeClass->CreateObject();
  322.   ASSERT( pObject->IsKindOf( RUNTIME_CLASS( CTest ) ) );
  323.   
  324.   doc->AddView((CView*) pObject);
  325.   */
  326.  
  327.   {
  328.     // enable file manager drag/drop and DDE Execute open
  329.     EnableShellOpen();
  330.     RegisterShellFileTypes();
  331.     // register "New File" handler
  332.     HKEY phkResult;
  333.     DWORD creResult;
  334.     if (RegCreateKeyEx(HKEY_CLASSES_ROOT,".whtt",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&phkResult,&creResult)==ERROR_SUCCESS) {
  335.       RegCloseKey(phkResult);
  336.       if (RegCreateKeyEx(HKEY_CLASSES_ROOT,".whtt\\ShellNew",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&phkResult,&creResult)==ERROR_SUCCESS) {
  337.         char voidbuff='\0';
  338.         RegSetValueEx(phkResult,"NullFile",0,REG_SZ,(LPBYTE)&voidbuff,1);
  339.         RegCloseKey(phkResult);
  340.       }
  341.     }   
  342.  
  343.     // Infos la 1ere fois!
  344.     CWinApp* pApp = AfxGetApp();
  345.     if (pApp->GetProfileInt("Interface","FirstRun",0) != 3) {
  346.       pApp->WriteProfileInt("Interface","FirstRun",3);
  347.  
  348.       Cabout about;
  349.       about.DoModal();
  350.       
  351.       // Default proxy?
  352.       if (maintab) {
  353.         maintab->DefineDefaultProxy();
  354.         if (maintab->DoModal()!=IDCANCEL) {
  355.           // Default proxy values
  356.           CString strSection       = "OptionsValues";
  357.           MyWriteProfileString("",strSection, "Proxy",maintab->m_option10.m_proxy);
  358.           MyWriteProfileString("",strSection, "Port",maintab->m_option10.m_port);
  359.         }
  360.         maintab->UnDefineDefaultProxy();
  361.       }
  362.     }
  363.   }
  364.   
  365.  
  366. #ifdef HTTRACK_AFF_WARNING
  367. #ifndef _DEBUG
  368.   AfxMessageBox("--WARNING--\r\n"HTTRACK_AFF_WARNING);
  369. #endif
  370. #endif
  371.  
  372.   return TRUE;
  373. }
  374.  
  375.  
  376. BOOL CWinHTTrackApp::WSockInit() {
  377.   // Initialiser WINSOCK
  378.   WORD   wVersionRequested; /* requested version WinSock API */ 
  379.   WSADATA wsadata;        /* Windows Sockets API data */
  380.   {
  381.     int stat;
  382.     wVersionRequested = 0x0101;
  383.     stat = WSAStartup( wVersionRequested, &wsadata );
  384.     if (stat != 0) {
  385.       //HTS_PANIC_PRINTF("Winsock not found!\n");
  386.     } else if (LOBYTE(wsadata.wVersion) != 1  && HIBYTE(wsadata.wVersion) != 1) {
  387.       //HTS_PANIC_PRINTF("WINSOCK.DLL does not support version 1.1\n");
  388.       WSACleanup();
  389.     }
  390.   }
  391.   // Fin Initialiser WINSOCK
  392.   return TRUE;
  393. }
  394.  
  395. /////////////////////////////////////////////////////////////////////////////
  396. // CAboutDlg dialog used for App About
  397.  
  398. /*
  399. class CAboutDlg : public CDialog
  400. {
  401. public:
  402.     CAboutDlg();
  403.  
  404. // Dialog Data
  405.     //{{AFX_DATA(CAboutDlg)
  406.     enum { IDD = IDD_ABOUTBOX };
  407.     //}}AFX_DATA
  408.  
  409.     // ClassWizard generated virtual function overrides
  410.     //{{AFX_VIRTUAL(CAboutDlg)
  411.     protected:
  412.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  413.     //}}AFX_VIRTUAL
  414.  
  415. // Implementation
  416. protected:
  417.     //{{AFX_MSG(CAboutDlg)
  418.         // No message handlers
  419.     //}}AFX_MSG
  420.     DECLARE_MESSAGE_MAP()
  421. };
  422.  
  423. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  424. {
  425.     //{{AFX_DATA_INIT(CAboutDlg)
  426.     //}}AFX_DATA_INIT
  427. }
  428.  
  429. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  430. {
  431.     CDialog::DoDataExchange(pDX);
  432.     //{{AFX_DATA_MAP(CAboutDlg)
  433.     //}}AFX_DATA_MAP
  434. }
  435.  
  436. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  437.     //{{AFX_MSG_MAP(CAboutDlg)
  438.         // No message handlers
  439.     //}}AFX_MSG_MAP
  440. END_MESSAGE_MAP()
  441. */
  442.  
  443. // App command to run the dialog
  444. void CWinHTTrackApp::OnAppAbout()
  445. {
  446.   Cabout about;
  447.   about.DoModal();
  448. //    CAboutDlg aboutDlg;
  449. //    aboutDlg.DoModal();
  450. }
  451.  
  452.  
  453. /* Request: Set new view in the splitter window (when clicking on finished, for example) */
  454. /*extern "C" {
  455.   int hts_resetvar(void);
  456. }*/
  457.  
  458. void CWinHTTrackApp::OnViewRestart() {
  459.   //CloseAllDocuments(FALSE);
  460.   //OnFileNew();
  461.  
  462.   /* Free library */
  463.   WHTT_LOCK();
  464.   hts_resetvar();
  465.   WHTT_UNLOCK();
  466.  
  467.   this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  468. }
  469.  
  470. void CWinHTTrackApp::OnWizRequest1() {
  471.   wizard diawiz;
  472.   diawiz.m_question=WIZ_question;
  473.   diawiz.DoModal();
  474.   strcpybuff(WIZ_reponse,diawiz.m_reponse);
  475. }
  476.  
  477. void CWinHTTrackApp::OnWizRequest2() {
  478.   wizard2 diawiz2;
  479.   diawiz2.m_question=WIZ_question;
  480.   if (diawiz2.DoModal()==IDOK)
  481.   strcpybuff(WIZ_reponse,"YES");
  482.   else
  483.     strcpybuff(WIZ_reponse,"NO");
  484. }
  485.  
  486. void CWinHTTrackApp::OnWizRequest3() {
  487.   WizLinks diawiz3;
  488.   diawiz3.m_url=WIZ_question;
  489.   if (diawiz3.DoModal()==IDskipall)
  490.     strcpybuff(WIZ_reponse,"*");
  491.   else
  492.     switch(diawiz3.m_lnk) {
  493.     case 0:
  494.       strcpybuff(WIZ_reponse,"0");
  495.       break;
  496.     case 1:
  497.       strcpybuff(WIZ_reponse,"1");
  498.       break;
  499.     case 2:
  500.       strcpybuff(WIZ_reponse,"2");
  501.       break;
  502.     case 3:
  503.       strcpybuff(WIZ_reponse,"4");
  504.       break;
  505.     case 4:
  506.       strcpybuff(WIZ_reponse,"5");
  507.       break;
  508.     case 5:
  509.       strcpybuff(WIZ_reponse,"6");
  510.       break;
  511.     default:
  512.       strcpybuff(WIZ_reponse,"");
  513.       break;
  514.   }
  515. }
  516.  
  517.  
  518. //
  519.  
  520.  
  521. /////////////////////////////////////////////////////////////////////////////
  522. // CWinHTTrackApp message handlers
  523.  
  524. // Ne fait pas partie de la classe
  525. /*
  526. UINT RunBackEngine( LPVOID pP ) {
  527.   static int running=0;
  528.   if (running)
  529.     return 0;
  530.   running=1;
  531.   {
  532.     CWinApp* app=AfxGetApp();
  533.     POSITION pos;
  534.     pos=app->GetFirstDocTemplatePosition();
  535.     CDocTemplate* templ = app->GetNextDocTemplate(pos);
  536.     pos=templ->GetFirstDocPosition();
  537.     CDocument* doc  = templ->GetNextDoc(pos);
  538.     pos=doc->GetFirstViewPosition();
  539.     CView*     view = doc->GetNextView(pos);
  540.     App_Main_HWND=view->m_hWnd;
  541.   }
  542.   //
  543.   CShellApp app;
  544.   app.InitInstance();
  545.   running=0;
  546.   return 0;
  547. }
  548. */
  549.  
  550. /*
  551. void CWinHTTrackApp::OnWizard() {
  552.   //this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  553. }
  554. */
  555.  
  556. afx_msg void CWinHTTrackApp::OnFileNew( ) {
  557.   OpenDocumentFile("");
  558. }
  559.  
  560. afx_msg void CWinHTTrackApp::OnFileOpen( ) {
  561.   this->CWinApp::OnFileOpen();
  562. }
  563.  
  564. void CWinHTTrackApp::OnFileSave() {
  565. }
  566.  
  567. void CWinHTTrackApp::OnFileSaveAs() 
  568. {
  569.     // TODO: Add your command handler code here
  570.     
  571. }
  572.  
  573. void CWinHTTrackApp::OnFileDelete()
  574. {
  575.   static char szFilter[256];
  576.   strcpybuff(szFilter,"WinHTTrack Website Copier Project (*.whtt)|*.whtt||");
  577.   CFileDialog* dial = new CFileDialog(true,"whtt",NULL,OFN_HIDEREADONLY,szFilter);
  578.   if (dial->DoModal() == IDOK) {
  579.     CString st=dial->GetPathName();
  580.     if (fexist((char*) LPCTSTR(st))) {
  581.       int pos=st.ReverseFind('.');
  582.       CString dir=st.Left(pos)+"\\";
  583.       char msg[1000];
  584.       sprintf(msg,"%s\r\n%s",LANG_DELETECONF,dir);
  585.       if (AfxMessageBox(msg,MB_OKCANCEL)==IDOK) {
  586.         if (remove(st)) {
  587.           AfxMessageBox("Error deleting "+st);
  588.         } else {
  589.           RmDir(dir);
  590.         }
  591.       }
  592.     } else
  593.       AfxMessageBox(LANG(LANG_G26 /*"File not found!","Fichier introuvable!"*/));
  594.   }
  595.   delete dial;
  596. }
  597.  
  598. void CWinHTTrackApp::OnBrowseWebsites()
  599. {
  600.   CString st=dialog0->GetBasePath();
  601.  
  602.   if (st.GetLength()<=1) {
  603.     CString strSection       = "DefaultValues";    
  604.     CWinApp* pApp = AfxGetApp();
  605.     st = pApp->GetProfileString(strSection, "BasePath");
  606.     st += "\\";
  607.   }
  608.  
  609.   st+="index.html";
  610.   ShellExecute(NULL,"open",st,"","",SW_RESTORE);    
  611. }
  612.  
  613. BOOL CWinHTTrackApp::RmDir(CString srcpath) {
  614.   CWaitCursor wait;
  615.  
  616.   if (srcpath.GetLength()==0)
  617.     return FALSE;
  618.   CString path=srcpath;
  619.   WIN32_FIND_DATA find;
  620.   if (path.Right(1)!="\\")
  621.     path+="\\";  
  622.   HANDLE h = FindFirstFile(path+"*.*",&find);
  623.   if (h != INVALID_HANDLE_VALUE) {
  624.     do {
  625.       if (!(find.dwFileAttributes  & FILE_ATTRIBUTE_SYSTEM ))
  626.       if (strcmp(find.cFileName,".."))
  627.       if (strcmp(find.cFileName,"."))
  628.         if (!(find.dwFileAttributes  & FILE_ATTRIBUTE_DIRECTORY )) {
  629.           if (remove(path+find.cFileName)) {
  630.             AfxMessageBox("Error deleting "+path+find.cFileName);
  631.             return FALSE;
  632.           }
  633.         } else {
  634.           if (!RmDir(path+find.cFileName))
  635.             return FALSE;
  636.         }
  637.     } while(FindNextFile(h,&find));
  638.     FindClose(h);
  639.   }
  640.   if (rmdir(srcpath)) {
  641.     AfxMessageBox("Error deleting "+srcpath);
  642.     return FALSE;
  643.   }
  644.   return TRUE;
  645. }
  646.  
  647.  
  648. void CWinHTTrackApp::OnFileMruFile1() 
  649. {
  650.     // TODO: Add your command handler code here
  651.     
  652. }
  653.  
  654. void CWinHTTrackApp::Onipabout() 
  655. {
  656.   Cabout about;
  657.   about.DoModal();
  658. }
  659.  
  660. void CWinHTTrackApp::OnUpdate() 
  661. {
  662.   CString st;
  663.   st.Format(HTS_UPDATE_WEBSITE,HTS_PLATFORM,LANGUAGE_NAME);
  664.   HtsHelper->Help(st);
  665. }
  666.  
  667. // Appel aide
  668. void CWinHTTrackApp::OnHelpInfo2() {
  669.   (void) OnHelpInfo(NULL);
  670. }
  671.  
  672. BOOL CWinHTTrackApp::OnHelpInfo(HELPINFO* dummy) 
  673. {
  674.   HtsHelper->Help("step2.html");
  675.   return true;
  676. }
  677.  
  678. // Forwards
  679.  
  680. void CWinHTTrackApp::FwOnhide() {
  681.   if (this_CSplitterFrame)
  682.     this_CSplitterFrame->Onhide();
  683.   else
  684.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  685. }
  686.  
  687. void CWinHTTrackApp::FwOnLoadprofile() {
  688.   if ((dialog1!=NULL) && (maintab!=NULL))
  689.     dialog1->OnLoadprofile();
  690.   else
  691.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  692. }
  693. void CWinHTTrackApp::FwOnSaveprofile() {
  694.   if ((dialog1!=NULL) && (maintab!=NULL))
  695.     dialog1->OnSaveprofile();
  696.   else
  697.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  698. }
  699. void CWinHTTrackApp::FwOnLoaddefault() {
  700.   if ((dialog1!=NULL) && (maintab!=NULL))
  701.     dialog1->OnLoaddefault();
  702.   else
  703.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  704. }
  705. void CWinHTTrackApp::FwOnSavedefault() {
  706.   if ((dialog1!=NULL) && (maintab!=NULL))
  707.     dialog1->OnSavedefault();
  708.   else
  709.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  710. }
  711. void CWinHTTrackApp::FwOnResetdefault() {
  712.   if ((dialog1!=NULL) && (maintab!=NULL))
  713.     dialog1->OnResetdefault();
  714.   else
  715.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  716. }
  717.  
  718. //
  719.  
  720. void CWinHTTrackApp::FwOnModifyOpt() {
  721.   if ((inprogress!=NULL) && (maintab!=NULL))
  722.     inprogress->OnModifyOpt();
  723.   else
  724.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  725. }
  726.  
  727. void CWinHTTrackApp::FwOnPause() {
  728.   if ((inprogress!=NULL) && (maintab!=NULL))
  729.     inprogress->OnPause();
  730.   else
  731.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  732. }
  733.  
  734. void CWinHTTrackApp::FwOniplogLog() {
  735.   if ((inprogress!=NULL) && (maintab!=NULL))
  736.     inprogress->OniplogLog();
  737.   else
  738.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  739. }
  740.  
  741. void CWinHTTrackApp::FwOniplogErr() {
  742.   if ((inprogress!=NULL) && (maintab!=NULL))
  743.     inprogress->OniplogErr();
  744.   else
  745.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  746. }
  747.  
  748. void CWinHTTrackApp::FwOnViewTransfers() {
  749.   if ((inprogress!=NULL) && (maintab!=NULL))
  750.     inprogress->OnViewTransfers();
  751.   else
  752.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  753. }
  754.  
  755. CDocument* CWinHTTrackApp::OpenDocumentFile( LPCTSTR lpszFileName)
  756. {
  757.   // Eviter deux fenΩtres (un seul document)
  758.   // Le CMultui..->CSingleDoc.. est trop complexe α changer (α cause du splitter-wnd)
  759.   int count=1;
  760.  
  761.   { /* Check if a document exists, and if exists if empty or not, and if name is different */
  762.     POSITION pos;
  763.     pos=GetFirstDocTemplatePosition();
  764.     if (pos) {
  765.       CDocTemplate* tmpl=GetNextDocTemplate(pos);
  766.       if (tmpl) {
  767.         pos=tmpl->GetFirstDocPosition();
  768.         if (pos) {
  769.           CDocument* doc  = tmpl->GetNextDoc(pos);
  770.           if (doc) {
  771.             if (dialog0->GetName().GetLength()==0) {
  772.               CloseAllDocuments(FALSE);
  773.               count=0;        /* No documents */
  774.             } else {
  775.               if (dialog0->GetPath0()+".whtt" == LPCSTR(lpszFileName))
  776.                 return NULL;
  777.             }
  778.           }
  779.         } else
  780.           count=0;          /* No documents */
  781.       }
  782.     }
  783.   }
  784.  
  785.   // Ouvrir nouvelle instance
  786.   if (count) {
  787.     char cmdl[2048];
  788.     TCHAR ModulePath[MAX_PATH + 1];
  789.     ModulePath[0] = '\0';
  790.     ::GetModuleFileName(NULL, ModulePath, sizeof(ModulePath)/sizeof(TCHAR) - 1);
  791.     CString name = ModulePath;
  792.     strcpybuff(cmdl,"\"");
  793.     strcatbuff(cmdl,lpszFileName);
  794.     strcatbuff(cmdl,"\"");
  795.     ShellExecute(NULL,"open",name,cmdl,"",SW_RESTORE);
  796.     return NULL;
  797.   }
  798.  
  799.   // Ouvrir nouveau?
  800.   //if (count)
  801.   //  return;       // ne rien faire, car limitΘ α 1 document
  802.   //count++;
  803.  
  804.   /* Ouvrir */
  805.   /*
  806.   CWinApp* app=AfxGetApp();
  807.   POSITION pos;
  808.   pos=app->GetFirstDocTemplatePosition();
  809.   CDocTemplate* templ = app->GetNextDocTemplate(pos);
  810.   pos=templ->GetFirstDocPosition();
  811.   if (pos) {
  812.     CDocument* doc  = templ->GetNextDoc(pos);
  813.     if (doc)
  814.       if (!doc->SaveModified())
  815.         return NULL;
  816.   }
  817.   CloseAllDocuments(FALSE);
  818.   */
  819.   if (strlen(lpszFileName))
  820.     return CWinApp::OpenDocumentFile(lpszFileName);
  821.   else
  822.     CWinApp::OnFileNew();
  823.   return NULL;
  824. }
  825.  
  826. void CWinHTTrackApp::NewTabs() {
  827.   DeleteTabs();
  828.   m_tab0 = new CFirstInfo();
  829.   m_tab1 = new CNewProj();
  830.   m_tab2 = new Wid1();
  831.   m_tab3 = new Ctrans();
  832.   m_tabprogress = new Cinprogress();
  833.   m_tabend = new Cinfoend();
  834. }
  835.  
  836. void CWinHTTrackApp::DeleteTabs() {
  837.   if (m_tab0)
  838.   if (m_tab0->GetSafeHwnd())       /* a dΘja ΘtΘ dΘtruit par CWinApp */
  839.     delete m_tab0;
  840.   if (m_tab1)
  841.   if (m_tab1->GetSafeHwnd())
  842.     delete m_tab1;
  843.   if (m_tab2)
  844.   if (m_tab2->GetSafeHwnd())
  845.     delete m_tab2;
  846.   if (m_tab3)
  847.   if (m_tab3->GetSafeHwnd())
  848.     delete m_tab3;
  849.   if (m_tabprogress)
  850.   if (m_tabprogress->GetSafeHwnd())
  851.     delete m_tabprogress;
  852.   if (m_tabend)
  853.   if (m_tabend->GetSafeHwnd())
  854.     delete m_tabend;
  855.  
  856.   m_tab0=NULL;
  857.   m_tab1=NULL;
  858.   m_tab2=NULL;
  859.   m_tab3=NULL;
  860.   m_tabprogress=NULL;
  861.   m_tabend=NULL;
  862. }
  863.  
  864. int CWinHTTrackApp::ExitInstance() 
  865. {
  866.   LANG_DELETE();
  867.  
  868.   /* Uninitialize */
  869.   htsthread_wait();
  870.   hts_uninit();
  871.  
  872.   return CWinApp::ExitInstance();
  873. }
  874.